home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 5 / Gekikoh Dennoh Club Vol. 5 (Japan).7z / Gekikoh Dennoh Club Vol. 5 (Japan) (Track 01).bin / internet / webx / jpged26s.lzh / Scroll.s < prev    next >
Encoding:
Text File  |  1995-07-26  |  19.1 KB  |  1,201 lines

  1. *
  2. *
  3. *       SCROLL.S
  4. *
  5. *
  6. *
  7. include  DOSCALL.MAC
  8. include  IOCSCALL.MAC
  9. include  JPEG.MAC
  10. include  work.inc
  11. include    keycode.inc
  12.   .text
  13. *
  14. *
  15.     .xdef    Scroll
  16.     .xref    inkey
  17.     .xref    make_interval_work
  18.     .xref    set_HOME_wait
  19.     .xref    PrintW,PrintWI
  20.     .xref    Disp_Pic_Zoom
  21.     .xref    Disp_Pic_Position
  22.     .xref    chk_key_fast
  23. *
  24. *    d6......Block X
  25. *    d7......Block Y
  26. *
  27. *
  28. *
  29. Scroll
  30.  
  31. *ëµû╩é╠ê╩ÆuÅεò±é≡Åëè·ë╗
  32. *-------------------
  33.         move.w    Maxline(a6),d0
  34.         move.w    d0,MOUSE_Z(a6)
  35.         move.w    d0,MOUSE_TZ(a6)
  36.         move.w    d0,HZ(a6)
  37.  
  38.         move.w    d0,d1
  39.         bsr    calc_XY_dots
  40.  
  41.         bsr    Disp_Pic_Position
  42.         bsr    Disp_Pic_Zoom
  43.  
  44.         btst.b    #7,Sys_flag2(a6)
  45.         beq    manual_scroll        ╡░─╜╕█░┘ùvïüé╚é╡
  46.  
  47.         move.w    Xline(a6),d1
  48.         cmp.w    VSXsize(a6),d1
  49.         bhi    @f
  50.         move.w    Yline(a6),d1
  51.         cmp.w    VSYsize(a6),d1
  52.         bls    manual_scroll        ╡░─╜╕█░┘òKùvû│é╡
  53. @@
  54.  
  55. *╡░─╜╕█░┘
  56. *---------------------
  57.         move.w    #1,DirX(a6)
  58.         clr.w    DirY(a6)
  59.         clr.w    DirZ(a6)
  60.  
  61.  
  62.         move.w    $9cc.w,TIME_BAK(a6)
  63.         move.w    #20,TIME_WAIT(a6)    ╡░─╜╕█░┘èJÄné▄é┼æ╥é┐0.2òb
  64.  
  65. auto_scroll
  66.         move.w    MOUSE_TZ(a6),-(sp)
  67.         move.w    MOUSE_TY(a6),-(sp)
  68.         move.w    MOUSE_TX(a6),-(sp)
  69.         bsr    inkey
  70.         move.w    (sp)+,d2
  71.         move.w    (sp)+,d3
  72.         move.w    (sp)+,d4
  73.  
  74.         tst.l    d0
  75.         bmi    sc90
  76.  
  77.     *╡░─╜╕█░┘Åêù¥
  78.     *-------------------------------
  79.         cmp.w    d5,d4
  80.         bne    sc580            ╖░ôⁿù═é▄é╜é═╧│╜é⌐éτôⁿù═ùLéΦ
  81.         cmp.w    d6,d2
  82.         bne    sc580            ╖░ôⁿù═é▄é╜é═╧│╜é⌐éτôⁿù═ùLéΦ
  83.         cmp.w    d7,d3
  84.         bne    sc580            ╖░ôⁿù═é▄é╜é═╧│╜é⌐éτôⁿù═ùLéΦ
  85.  
  86.     *îoë▀Ä₧è╘îvÄZ
  87.     *-------------------------------
  88.         move.w    $9cc.w,d1
  89.         move.w    TIME_BAK(a6),d0
  90.         move.w    d1,TIME_BAK(a6)
  91.         sub.w    d1,d0
  92.         bcc    @f
  93.         add.w    $9ca.w,d0
  94. @@
  95.     *Ä₧è╘æ╥é┐Åêù¥
  96.     *-------------------------------
  97.         move.w    TIME_WAIT(a6),d1
  98.         beq    sc_auto
  99.         sub.w    d0,d1
  100.         bcc    @f
  101.         clr.w    d1
  102. @@
  103.         move.w    d1,TIME_WAIT(a6)
  104.         bra    sc590
  105.  
  106.     *╜╕█░┘ò√îⁿîvÄZ
  107.     *-------------------------------
  108. sc_auto
  109.         bsr    chk_key_fast
  110.  
  111.         move.w    Xline(a6),d2
  112.         move.w    Yline(a6),d3
  113.         sub.w    XL2(a6),d2
  114.         bcc    @f
  115.         clr.w    d2
  116. @@
  117.         sub.w    YL2(a6),d3
  118.         bcc    @f
  119.         clr.w    d3
  120. @@
  121.         moveq.l    #0,d4
  122.  
  123.         tst.w    DirY(a6)
  124.         bmi    sc_xy_y_bak
  125.         bnz    sc_xy_y_ff
  126.         tst.w    DirX(a6)
  127.         bmi    sc_xy_x_bak
  128.         bnz    sc_xy_x_ff
  129.         tst.w    DirZ(a6)
  130.         bmi    sc_zoom_in
  131.         bnz    sc_zoom_out
  132.         bra    sc_auto_end
  133.  
  134.         *ëEé╓ê┌ô«
  135.         *---------------------------
  136. sc_xy_x_ff
  137.         cmp.w    #512,Xline(a6)
  138.         bls    @f
  139.  
  140.         add.w    d0,d6
  141.         cmp.w    d6,d2
  142.         bcc    sc590
  143.         move.w    d2,d6
  144.         moveq.l    #20,d4
  145. @@
  146.         moveq.l    #0,d0
  147.         moveq.l    #-1,d1
  148.         moveq.l    #0,d2
  149.         bra    sc_next_wait
  150.  
  151.         *Åπé╓ê┌ô«
  152.         *---------------------------
  153. sc_xy_y_bak
  154.         cmp.w    #512,Yline(a6)
  155.         bls    2f
  156.  
  157.         sub.w    d0,d7
  158.         bcs    1f
  159.         cmp.w    YL2(a6),d7
  160.         bcc    sc590
  161. 1
  162.         move.w    YL2(a6),d7
  163.         moveq.l    #20,d4
  164. 2
  165.         moveq.l    #-1,d0
  166.         moveq.l    #0,d1
  167.         moveq.l    #0,d2
  168.         bra    sc_next_wait
  169.  
  170.         *ì╢é╓ê┌ô«
  171.         *---------------------------
  172. sc_xy_x_bak
  173.         cmp.w    #512,Xline(a6)
  174.         bls    2f
  175.  
  176.         sub.w    d0,d6
  177.         bcs    1f
  178.         cmp.w    XL2(a6),d6
  179.         bcc    sc590
  180. 1
  181.         move.w    XL2(a6),d6
  182.         moveq.l    #20,d4
  183. 2
  184.         moveq.l    #0,d0
  185.         moveq.l    #1,d1
  186.         moveq.l    #0,d2
  187.         bra    sc_next_wait
  188.  
  189.  
  190.         *ë║é╓ê┌ô«
  191.         *---------------------------
  192. sc_xy_y_ff
  193.         cmp.w    #512,Yline(a6)
  194.         bls    @f
  195.  
  196.         add.w    d0,d7
  197.         cmp.w    d7,d3
  198.         bcc    sc590
  199.  
  200.         move.w    d3,d7
  201.         moveq.l    #20,d4
  202. @@
  203.         moveq.l    #0,d0
  204.         moveq.l    #0,d1
  205.         moveq.l    #1,d2
  206.         bra    sc_next_wait
  207.  
  208.     *╡░─Åkż
  209.     *-----------------------------
  210. sc_zoom_out
  211.         moveq.l    #0,d4
  212.  
  213.         *ö{ùªîvÄZ
  214.         *-------------------
  215.         sub.w    d0,d5
  216.         bcs    1f
  217.         cmp.w    #512,d5
  218.         bhi    2f
  219. 1
  220.         move.w    #512,d5
  221.         moveq.l    #80,d4
  222. 2
  223.         *Homeê╩ÆuîvÄZ
  224.         *-------------------
  225.             *Xò√îⁿ
  226.             *--------------------
  227.             move.w    VSXsize(a6),d2
  228.             move.w    Xline(a6),d3
  229.             cmp.w    d3,d2
  230.             bcc    2f
  231.  
  232.             move.w    d2,d6
  233.             mulu.w    Maxline(a6),d6
  234.             divu.w    d5,d6
  235.             cmp.w    d3,d6
  236.             bls    1f
  237.             move.w    d3,d6
  238. 1
  239.             lsr.w    d6
  240. 2
  241.             *Yò√îⁿ
  242.             *---------------------
  243.             move.w    VSYsize(a6),d2
  244.             move.w    Yline(a6),d3
  245.             cmp.w    d3,d2
  246.             bcc    2f
  247.  
  248.             move.w    d2,d7
  249.             mulu.w    Maxline(a6),d7
  250.             divu.w    d5,d7
  251.             cmp.w    d3,d7
  252.             bls    1f
  253.             move.w    d3,d7
  254. 1
  255.             lsr.w    d7
  256.             sub.w    d7,d3
  257.             move.w    d3,d7
  258. 2
  259.         tst.w    d4
  260.         beq    sc590
  261.         moveq.l    #0,d0
  262.         moveq.l    #0,d1
  263.         moveq.l    #-1,d2
  264.         bra    sc_next_wait
  265.  
  266.     *╡░─ègæσ
  267.     *-----------------------------
  268. sc_zoom_in
  269.         add.w    d0,d5
  270.         bcs    @f
  271.         cmp.w    Maxline(a6),d5
  272.         bcs    sc590
  273. @@
  274.         move.w    Maxline(a6),d5
  275.         moveq.l    #0,d0
  276.         moveq.l    #0,d1
  277.         moveq.l    #0,d2
  278.         moveq.l    #20,d4
  279. sc_next_wait
  280.         move.w    d0,DirX(a6)
  281.         move.w    d1,DirY(a6)
  282.         move.w    d2,DirZ(a6)
  283.         move.w    d4,TIME_WAIT(a6)
  284.         bsr    move_pic
  285.         move.w    $9cc.w,TIME_BAK(a6)
  286.         bra    auto_scroll
  287.  
  288.     *╜╕█░┘ì└òWÉ▌ÆΦ
  289.     *-----------------------------
  290. sc590
  291.         bsr    move_pic
  292.         bra    auto_scroll
  293.  
  294.     *╡░─╜╕█░┘&╜▐░╤ÅIù╣
  295.     *-----------------------------
  296. sc_auto_end
  297.         bsr    move_pic
  298.         btst.b    #0,Sys_flag(a6)
  299.         beq    sc90            ╖░ôⁿù═æ╥é┐é╚é╡
  300.  
  301. *ü@╖░ôⁿù═üò╜╕█░┘
  302. *-------------------
  303. manual_scroll
  304.  
  305.     btst.b    #0,Sys_flag(a6)
  306.     beq    sc90                âLü[ôⁿù═æ╥é┐╡╠▀╝«▌é╚é╡
  307.  
  308. @@
  309.         bsr    inkey
  310.         tst.l    d0
  311.         bmi    sc90
  312. sc580
  313.         bsr    move_pic
  314.         bra    @b
  315. sc90
  316.         rts
  317.  
  318. ******************************************************************************
  319. *
  320. *    ëµæ£ê┌ô«
  321. *
  322. *    ôⁿù═
  323. *        d5.w    ëµæ£é╠ö{ùª
  324. *        d6.w    ëµæ£é╠ÆåÉSê╩Æux
  325. *        d7.w    ëµæ£é╠ÆåÉSê╩Æuy
  326. ******************************************************************************
  327. move_pic
  328.         move.w    d6,MOUSE_TX(a6)
  329.         move.w    d7,MOUSE_TY(a6)
  330.         move.w    d5,MOUSE_TZ(a6)
  331.         movem.w    d5-d7,-(sp)
  332.  
  333. *------------------------------
  334. *ö{ùªé¬ò╧ìXé│éΩé╜ÅΩìç
  335. *------------------------------
  336.     cmp.w    MOUSE_Z(a6),d5
  337.     beq    move_pic_home    ò╧ìXé│éΩé─é╚éó
  338.  
  339. *ö{ùªò╧ìXæOé╠ëµæ£ò\ĪèJÄnÅIù╣ê╩Æué≡ò█æ╢
  340. *---------------------
  341.         move.w    MOUSE_X(a6),d6
  342.         move.w    MOUSE_Y(a6),d7
  343.         bsr    calc_disp_XYdots
  344.         sub.w    d0,d1
  345.         sub.w    d2,d3
  346.         add.w    Home_FX(a6),d0
  347.         add.w    Home_FY(a6),d2
  348.         sub.w    Home_X(a6),d0
  349.         sub.w    Home_Y(a6),d2
  350.         and.w    #$1ff,d0
  351.         and.w    #$1ff,d2
  352.         add.w    d0,d1
  353.         add.w    d2,d3
  354.         movem.w    d0-d3,-(sp)
  355.  
  356. *ö{ùªîvÄZ
  357. *----------------------
  358.         move.w    MOUSE_TX(a6),d6
  359.         move.w    MOUSE_TY(a6),d7
  360.         move.w    MOUSE_TZ(a6),d5
  361.  
  362.         move.w    Maxline(a6),d1
  363.         cmp.w    d1,d5
  364.         bls    1f
  365.  
  366.         *ègæσé╠ÅΩìç
  367.         *----------------------
  368.         move.w    d1,d0
  369.         add.w    d1,d1
  370.         sub.w    d5,d1
  371.  
  372.         bra    2f
  373. 1
  374.         *Åkżé╠ÅΩìç
  375.         *----------------------
  376.         move.w    d5,d0
  377. 2
  378.         bsr    calc_XY_dots
  379.  
  380.         clr.w    Home_FX(a6)
  381.         clr.w    Home_FY(a6)
  382.         bsr    calc_HOME
  383.         sub.w    Home_X(a6),d2
  384.         sub.w    Home_Y(a6),d3
  385.  
  386.         sub.w    d2,Home_FX(a6)
  387.         sub.w    d3,Home_FY(a6)
  388.  
  389. *âüâbâZü[âWò\Ī
  390. *---------------------
  391.         bsr    Disp_Pic_Zoom
  392.         bsr    Disp_Pic_Position
  393.  
  394. *ìíé╠ëµæ£ò\Īö═ê═é≡îvÄZ
  395. *-------------------------
  396.         move.w    MOUSE_TX(a6),d6
  397.         move.w    MOUSE_TY(a6),d7
  398.         bsr    calc_disp_XYdots
  399.         movem.w    (sp)+,d4-d7
  400.  
  401. *ê╚æOò\Īé╡é╜ö═ê═é╞üAìíé╠ö═ê═é╠ù╝ò√é╞éαè▄é▐ö═ê═é≡îvÄZ
  402. *(d4,d5)-(d6,d7)
  403. *-------------------------
  404.         sub.w    d0,d1
  405.         sub.w    d2,d3
  406.         add.w    Home_FX(a6),d0
  407.         add.w    Home_FY(a6),d2
  408.         sub.w    Home_X(a6),d0
  409.         sub.w    Home_Y(a6),d2
  410.         and.w    #$1ff,d0
  411.         and.w    #$1ff,d2
  412.         add.w    d0,d1
  413.         add.w    d2,d3
  414.  
  415.         cmp.w    d0,d4
  416.         bls    @f
  417.         move.w    d0,d4
  418. @@
  419.         cmp.w    d1,d5
  420.         bcc    @f
  421.         move.w    d1,d5
  422. @@
  423.         cmp.w    d2,d6
  424.         bls    @f
  425.         move.w    d2,d6
  426. @@
  427.         cmp.w    d3,d7
  428.         bcc    @f
  429.         move.w    d3,d7
  430. @@
  431.     *ëµû╩Åπé╠ò\Īê╩Æué≡ëµæ£Åπé╠ò\Īê╩Æué╔ò╧è╖
  432.     *(d4,d6)-(d4+d5,d6+d7)
  433.     *--------------------------
  434.         sub.w    d0,d5
  435.         sub.w    d2,d7
  436.         sub.w    d0,d4
  437.         sub.w    d2,d6
  438.         neg.w    d4
  439.         neg.w    d6
  440.  
  441.         addq.w    #1,d5
  442.         addq.w    #1,d7
  443.  
  444.         moveq.l    #0,d1
  445.         move.w    Interval(a6),d1
  446.         move.w    Interval+2(a6),d0
  447.  
  448.         mulu.w    d0,d5
  449.         add.l    d1,d5
  450.         subq.l    #1,d5
  451.         move.w    d5,d2
  452.         clr.w    d5
  453.         swap.w    d5
  454.         divu.w    d1,d5
  455.         move.w    d2,d5
  456.         divu.w    d1,d5
  457.         add.w    XL4(a6),d5
  458.  
  459.         mulu.w    d0,d7
  460.         add.l    d1,d7
  461.         subq.l    #1,d7
  462.         move.w    d7,d2
  463.         clr.w    d7
  464.         swap.w    d7
  465.         divu.w    d1,d7
  466.         move.w    d2,d7
  467.         divu.w    d1,d7
  468.         add.w    YL4(a6),d7
  469.  
  470.         mulu.w    d0,d4
  471.         add.l    d1,d4
  472.         subq.l    #1,d4
  473.         move.w    d4,d2
  474.         clr.w    d4
  475.         swap.w    d4
  476.         divu.w    d1,d4
  477.         move.w    d2,d4
  478.         divu.w    d1,d4
  479.         add.w    XL4(a6),d4
  480.  
  481.         mulu.w    d0,d6
  482.         add.l    d1,d6
  483.         subq.l    #1,d6
  484.         move.w    d6,d2
  485.         clr.w    d6
  486.         swap.w    d6
  487.         divu.w    d1,d6
  488.         move.w    d2,d6
  489.         divu.w    d1,d6
  490.         add.w    YL4(a6),d6
  491.  
  492.         add.w    d4,d5
  493.         add.w    d6,d7
  494.  
  495.     *ò\ĪèJÄnê╩Æué╠é═é▌Åoé╡┴¬»╕
  496.     *-----------------------------
  497.         move.w    MOUSE_TX(a6),d0
  498.         sub.w    XL2(a6),d0
  499.         move.w    d0,d1
  500.         bpl    @f
  501.         clr.w    d1
  502. @@
  503.         sub.w    d4,d1
  504.         cmp.w    d0,d1
  505.         bge    @f
  506.         move.w    d0,d1
  507. @@
  508.         move.w    d1,d4
  509.  
  510.         move.w    MOUSE_TY(a6),d0
  511.         sub.w    YL2(a6),d0
  512.         move.w    d0,d1
  513.         bpl    @f
  514.         clr.w    d1
  515. @@
  516.         sub.w    d6,d1
  517.         cmp.w    d0,d1
  518.         bge    @f
  519.         move.w    d0,d1
  520. @@
  521.         move.w    d1,d6
  522.  
  523.     *ëµæ£Åπé╠ò\Īê╩Æué⌐éτüAGetParté╠ôⁿù═┌╝▐╜└î`Ä«é╔ò╧è╖
  524.     *(d4,d6)-(d4+d5,d6+d7)ü@ü¿  (d2,d3) Xsize=d6 Ysize=d1
  525.     *--------------------------
  526.         move.w    d4,d2
  527.         move.w    d6,d3
  528.         move.w    d5,d6
  529.         move.w    d7,d1
  530.  
  531.         bsr    GetPart
  532.         bra    move_pic_x_end
  533.  
  534. *------------------------------
  535. *ëµæ£é≡ÉVé╜é╔Åæé½ì₧é▐ê╩Æué≡îvÄZ
  536. *------------------------------
  537. move_pic_home
  538.     *éwò√îⁿé╠îvÄZ(d0.w:ê┌ô«ù╩ d2.w:ò\ĪèJÄnê╩Æu)
  539.     *---------------------
  540.     move.w    d6,d0
  541.     move.w    d6,d2
  542.     sub.w    XL2(a6),d2
  543.     sub.w    MOUSE_X(a6),d0
  544.     bcs    calc_vposx20        ì╢é╔ê┌ô«
  545.  
  546.         *ëEé╔ê┌ô«é╠ÅΩìç
  547.         *-----------------------------
  548.         cmp.w    XL(a6),d0
  549.         bcs    @f
  550.         move.w    XL(a6),d0
  551. @@
  552.         add.w    XL(a6),d2
  553.         sub.w    d0,d2
  554.         sub.w    XL4(a6),d2
  555.         bra    calc_vposx_end
  556.  
  557.         *ì╢é╔ê┌ô«é╠ÅΩìç
  558.         *------------------------------
  559. calc_vposx20
  560.         neg.w    d0
  561.         cmp.w    XL(a6),d0
  562.         bcs    calc_vposx_end
  563.         move.w    XL(a6),d0
  564. calc_vposx_end
  565.  
  566.     *éxò√îⁿé╠îvÄZ(d1.w:ê┌ô«ù╩ d3.w:ò\ĪèJÄnê╩Æu)
  567.     *---------------------
  568.     move.w    d7,d1
  569.     move.w    d7,d3
  570.     sub.w    YL2(a6),d3
  571.     sub.w    MOUSE_Y(a6),d1
  572.     bcs    calc_vposy20
  573.  
  574.         *ë║é╔ê┌ô«é╠ÅΩìç
  575.         *-----------------------------
  576.         cmp.w    YL(a6),d1
  577.         bcs    @f
  578.         move.w    YL(a6),d1
  579. @@
  580.         add.w    YL(a6),d3
  581.         sub.w    d1,d3
  582.         sub.w    YL4(a6),d3
  583.         bra    calc_vposy_end
  584.  
  585.         *Åπé╔ê┌ô«é╠ÅΩìç
  586.         *-----------------------------
  587. calc_vposy20
  588.         neg.w    d1
  589.         cmp.w    YL(a6),d1
  590.         bcs    calc_vposy_end
  591.         move.w    YL(a6),d1
  592. calc_vposy_end
  593.  
  594. *ê┌ô«ù╩é¬éOé╠ÅΩìçé═âoâbâNâOâëâôâhâvâìâZâXé≡ô«é⌐é╖
  595. *-----------------------
  596.         tst.w    d0
  597.         bne    @f
  598.         tst.w    d1
  599.         bne    @f
  600.  
  601.         move.w    d0,-(sp)
  602.         DOS    $ffff
  603.         move.w    (sp)+,d0
  604.         bra    move_pic_y_move
  605. @@
  606.         bsr    Disp_Pic_Position
  607. move_pic_y_move
  608.  
  609. *ëµû╩é╠âzü[âÇê╩Æu(d2.w,d3.w)é≡ò╧ìX
  610. *----------------------
  611.     movem.w    d0-d3,-(sp)
  612.  
  613.     bsr    calc_HOME
  614.     bsr    set_HOME_wait
  615. *    move.w    #$003f,$e82200
  616. *    or.w    #$4000,$e82600
  617.  
  618.     movem.w    (sp)+,d0-d3
  619.  
  620. *éxò√îⁿé╠ê┌ô«
  621. *-----------------------
  622.     movem.w    d0-d3/d6-d7,-(sp)
  623.     tst.w    d1
  624.     beq    move_pic_y_end
  625.  
  626.     move.w    d6,d2
  627.     sub.w    XL2(a6),d2
  628.     move.w    XL(a6),d6
  629.     bsr    GetPart
  630.  
  631. move_pic_y_end
  632.     movem.w    (sp)+,d0-d3/d6-d7
  633.  
  634. *éwò√îⁿé╠ê┌ô«
  635. *-----------------------
  636. move_pic_x_move
  637.     move.w    d0,d6
  638.     beq    move_pic_x_end        Xò√îⁿé╠ê┌ô«ù╩=0
  639.  
  640.     move.w    d7,d0
  641.     sub.w    YL2(a6),d0
  642.  
  643.     cmp.w    d0,d3
  644.     bne    move_pic_x_10
  645.     add.w    d1,d3
  646.     bra    move_pic_x_20
  647. move_pic_x_10
  648.     move.w    d0,d3
  649. move_pic_x_20
  650.  
  651.     *ò\Īé╖éΘ╫▓▌Éöé≡îvÄZ
  652.     *----------------------------
  653.     move.w    YL(a6),d7
  654.     sub.w    d1,d7
  655.     bls    move_pic_x_end        ò\Īé╖éΘ╫▓▌Éöé═0
  656.  
  657.     move.w    d7,d1
  658.     bsr    GetPart
  659.  
  660. move_pic_x_end
  661.  
  662.     movem.w    (sp)+,d5-d7
  663.  
  664. move_pic_end
  665. *ëµæ£ê╩Æué≡É▌ÆΦ
  666. *---------------------
  667.     move.w    d5,MOUSE_Z(a6)
  668.     move.w    d6,MOUSE_X(a6)
  669.     move.w    d7,MOUSE_Y(a6)
  670.  
  671. *    move.w    #$0000,$E82200
  672.  
  673.     rts
  674.  
  675. ***********************************
  676. *
  677. *    ëµæ£é≡ò\Īé╖éΘÅcëí─▐»─Éöé≡îvÄZ
  678. *
  679. *    ôⁿù═    d6        ëµæ£ò\ĪÆåÉSX
  680. *        d7        ëµæ£ò\ĪÆåÉSY
  681. *    Åoù═    d0        ëµæ£é╠ò\ĪèJÄnX─▐»─
  682. *        d1        ëµæ£é╠ò\ĪÅIù╣X─▐»─
  683. *        d2        ëµæ£é╠ò\ĪèJÄnY─▐»─
  684. *        d3        ëµæ£é╠ò\ĪÅIù╣Y─▐»─
  685. *    öjë≤    d4
  686. ***********************************
  687. calc_disp_XYdots
  688.  
  689.         move.w    Interval(a6),d0
  690.         move.w    Interval+2(a6),d1
  691.  
  692.     *Xò√îⁿé╠ò\ĪèJÄné╞ÅIù╣─▐»─é≡îvÄZé╡ò█æ╢
  693.     *--------------------
  694.         move.w    d6,d2
  695.  
  696.         sub.w    XL2(a6),d2
  697.         move.w    XL(a6),d3
  698.         add.w    d2,d3
  699.  
  700.         tst.w    d2
  701.         bpl    @f
  702.         clr.w    d2
  703.         sub.w    XL4(a6),d2
  704. @@
  705.         cmp.w    Xline(a6),d3
  706.         bcs    @f
  707.         move.w    Xline(a6),d3
  708. @@
  709.         bsr    calc_disp_dots
  710.         movem.w    d2-d3,-(sp)
  711.  
  712.     *Yò√îⁿé╠ò\ĪèJÄné╞ÅIù╣─▐»─é≡îvÄZé╡ò█æ╢
  713.     *--------------------
  714.         move.w    d7,d2
  715.  
  716.         sub.w    YL2(a6),d2
  717.         move.w    YL(a6),d3
  718.         add.w    d2,d3
  719.  
  720.         tst.w    d2
  721.         bpl    @f
  722.         clr.w    d2
  723.         sub.w    YL4(a6),d2
  724. @@
  725.         cmp.w    Yline(a6),d3
  726.         bcs    @f
  727.         move.w    Yline(a6),d3
  728. @@
  729.         bsr    calc_disp_dots
  730.  
  731.         movem.w    (sp)+,d0-d1
  732.  
  733.         rts
  734. ***********************************
  735. *
  736. *    ëµæ£é≡ò\Īé╖éΘ─▐»─Éöé≡îvÄZ
  737. *
  738. *    ôⁿù═    d0.w/d1.w    ö{ùª
  739. *        d2        ò\ĪèJÄnê╩Æu
  740. *        d3        ò\ĪÅIù╣ê╩Æu
  741. *    Åoù═    d2        ëµæ£é╠ò\ĪèJÄn─▐»─
  742. *        d3        ëµæ£é╠ò\ĪÅIù╣─▐»─
  743. *    öjë≤    d4
  744. ***********************************
  745. calc_disp_dots
  746.  
  747.         add.w    #$8000,d2
  748.         mulu.w    d0,d2
  749.         move.w    d2,d4
  750.         clr.w    d2
  751.         swap.w    d2
  752.         divu.w    d1,d2
  753.         move.w    d4,d2
  754.         divu.w    d1,d2
  755.  
  756.         add.w    #$8000,d3
  757.         mulu.w    d0,d3
  758.         move.w    d3,d4
  759.         clr.w    d3
  760.         swap.w    d3
  761.         divu.w    d1,d3
  762.         move.w    d4,d3
  763.         divu.w    d1,d3
  764.  
  765.         rts
  766.  
  767. ***********************************
  768. *
  769. *    ëµæ£é≡ò\Īé╖éΘÅcëí─▐»─Éöé≡îvÄZ
  770. *
  771. *    ôⁿù═
  772. *        d0.w/d1.w....ö{ùª
  773. *
  774. *    öjë≤    d2,d3,d4
  775. ***********************************
  776. .xdef    calc_XY_dots
  777. calc_XY_dots
  778.     movem.w    d0-d1,Interval(a6)
  779.  
  780.     moveq.l    #0,d3
  781.     move.w    d0,d3
  782.     subq.w    #1,d3
  783.  
  784.     move.w    VSXsize(a6),d2
  785.     mulu.w    d1,d2
  786.     add.l    d3,d2
  787.     divu.w    d0,d2
  788.     move.w    d2,XL(a6)
  789.     move.l    d2,d3
  790.     swap.w    d3
  791.     lsr.w    d2
  792.     bcc    @f
  793.     add.w    d0,d3
  794. @@
  795.     moveq.l    #0,d4
  796.     lsr.w    d3
  797.     beq    @f
  798.     moveq.l    #1,d4
  799. @@
  800.     add.w    d1,d3
  801.     move.w    d2,XL2(a6)
  802.     move.w    d3,XL3(a6)
  803.     move.w    d4,XL4(a6)
  804.  
  805.     moveq.l    #0,d3
  806.     move.w    d0,d3
  807.     subq.w    #1,d3
  808.  
  809.     move.w    VSYsize(a6),d2
  810.     mulu.w    d1,d2
  811.     add.l    d3,d2
  812.     divu.w    d0,d2
  813.     move.w    d2,YL(a6)
  814.     move.l    d2,d3
  815.     swap.w    d3
  816.     lsr.w    d2
  817.     bcc    @f
  818.     add.w    d0,d3
  819. @@
  820.     moveq.l    #0,d4
  821.     lsr.w    d3
  822.     beq    @f
  823.     moveq.l    #1,d4
  824. @@
  825.     add.w    d1,d3
  826.     move.w    d2,YL2(a6)
  827.     move.w    d3,YL3(a6)
  828.     move.w    d4,YL4(a6)
  829.     rts
  830.  
  831. ***********************************
  832. *
  833. *    ëµû╩é╠Homeê╩Æué≡îvÄZ
  834. *
  835. *    ôⁿù═
  836. *        d6.w
  837. *        d7.w
  838. *    Åoù═
  839. *        d2.w
  840. *        d3.w
  841. ***********************************
  842. calc_HOME
  843.     move.w    Interval(a6),d0
  844.     move.w    Interval+2(a6),d1
  845.  
  846.     move.w    d6,d2
  847.     sub.w    XL2(a6),d2
  848.     add.w    #$8000,d2
  849.     mulu.w    d0,d2
  850.     move.w    d2,d4
  851.     clr.w    d2
  852.     swap.w    d2
  853.     divu.w    d1,d2
  854.     move.w    d4,d2
  855.     divu.w    d1,d2
  856.     add.w    Home_FX(a6),d2
  857.     and.w   #$1ff,d2
  858.  
  859.     move.w    d7,d3
  860.     sub.w    YL2(a6),d3
  861.     add.w    #$8000,d3
  862.     mulu.w    d0,d3
  863.     move.w    d3,d4
  864.     clr.w    d3
  865.     swap.w    d3
  866.     divu.w    d1,d3
  867.     move.w    d4,d3
  868.     divu.w    d1,d3
  869.     add.w    Home_FY(a6),d3
  870.     and.w   #$1ff,d3
  871.     rts
  872. ******************************************************************************
  873. *
  874. *    òöò¬ò\Ī
  875. *
  876. *    ôⁿù═
  877. *        d1.w...ò\Īé╖éΘÅcò√îⁿé╠─▐»─Éö
  878. *        d2.w...ëµæ£Åπé╠ê╩Æux
  879. *        d3.w...ëµæ£Åπé╠ê╩Æuy
  880. *        d6.w...ò\Īé╖éΘëíò√îⁿé╠─▐»─Éö
  881. ******************************************************************************
  882. GetPart
  883.  
  884. *ëµû╩é╠ò\ĪÅcéΓëíé╠─▐»─Éöé¬ï⌠Éöé╠ÅΩìçüAéPæ½é╖
  885. *-------------------------
  886.     add.w    XL4(a6),d6
  887.     add.w    YL4(a6),d1
  888.  
  889.     movem.w    d0/d2/d5-d7,-(sp)
  890.  
  891. * a2.l = VRAM▒─▐┌╜
  892. *-------------------------
  893.     movea.l    VSadr(a6),a2
  894.     move.w    Interval+2(a6),d4
  895.     move.w    d2,d0
  896.     add.w    #$8000,d0
  897.     mulu.w    Interval(a6),d0
  898.     move.w    d0,d7
  899.     clr.w    d0
  900.     swap.w    d0
  901.     divu.w    d4,d0
  902.     move.w    d7,d0
  903.     divu.w    d4,d0
  904.     add.w    Home_FX(a6),d0
  905.     and.w    #$1ff,d0
  906.     move.w    d0,d5
  907.  
  908.     add.w    d0,d0
  909.     adda.w    d0,a2
  910.  
  911.     move.w    d3,d0
  912.     add.w    #$8000,d0
  913.     mulu.w    Interval(a6),d0
  914.     move.w    d0,d7
  915.     clr.w    d0
  916.     swap.w    d0
  917.     divu.w    d4,d0
  918.     move.w    d7,d0
  919.     divu.w    d4,d0
  920.     add.w    Home_FY(a6),d0
  921.     move.l    d0,d4
  922.  
  923.     and.l    #$1ff,d0
  924.     lsl.l    #8,d0
  925.     lsl.l    #2,d0
  926.     adda.l    d0,a2
  927.  
  928. * Yò√îⁿé╠ÄcéΦ─▐»─Éöé≡îvÄZ(d4)
  929. *---------------------------------
  930.     sub.w    Home_Y(a6),d4
  931.     and.w    #$1ff,d4
  932.     sub.w    VSXsize(a6),d4
  933.     neg.w    d4
  934.     move.w    d4,Y_last(a6)
  935.  
  936. * Yò√îⁿé╠ö{ùªîvÄZâÅü[âNì∞ɼ(d4)
  937. *---------------------------------
  938.     swap.w    d4
  939.     add.w    YL3(a6),d4
  940.  
  941. *Yê╩Æué¬òëé╠ÅΩìçé╠Åêù¥
  942. *---------------------------------
  943.     tst.w    d3
  944.     bpl    @f
  945.     move.w    d5,-(sp)
  946.     bsr    GetPartYOver
  947.     move.w    (sp)+,d5
  948.     tst.w    d1
  949.     beq    GetPart_allend
  950. @@
  951.     cmp.w    Yline(a6),d3
  952.     bcc    GetPart110
  953.  
  954.     cmp.w    Xline(a6),d2
  955.     bge    GetPart110
  956.  
  957.     move.w    d2,d0
  958.     add.w    d6,d0
  959.     bmi    GetPart110
  960.  
  961. *ëµæ£ëíôWèJû╜ù▀ì∞ɼ
  962. *-------------------------
  963.     move.w    d6,-(sp)
  964.  
  965.     subq.w    #1,d6
  966.     add.w    d2,d6
  967.  
  968.     move.w    MOUSE_TZ(a6),d0
  969.     cmp.w    HZ(a6),d0
  970.     bne    GetPart_mkwk_10        ö{ùªé¬ò╧ìXé│éΩé╜
  971.     cmp.w    HX(a6),d5
  972.     bne    GetPart_mkwk_10        Homeê╩Æué¬ò╧ë╗é╡é╜
  973.     cmp.w    XS(a6),d2
  974.     bne    GetPart_mkwk_10        ò\ĪèJÄnê╩Æué¬ò╧éφé┴é╜
  975.  
  976.     cmp.w    XE(a6),d6
  977.     beq    GetPart_mkwk_end
  978. GetPart_mkwk_10
  979.     movem.l    d0-d4,-(sp)
  980.     move.w    d5,HX(a6)
  981.     move.w    d0,HZ(a6)
  982.     move.w    d2,XS(a6)
  983.     move.w    d6,XE(a6)
  984.     move.w    VSXsize(a6),d7
  985.     bsr    make_interval_work
  986.     movem.l    (sp)+,d0-d4
  987. GetPart_mkwk_end
  988.  
  989.     move.w    (sp)+,d6
  990.  
  991. * a0.l = ëµæ£âAâhâîâX
  992. *-------------------------
  993.         tst.w    d2
  994.         bpl    @f
  995.         moveq.l    #0,d2
  996. @@
  997.         move.w    d2,d0
  998.         and.l    #$0000fff8,d0
  999.         lsl.l    #7-3,d0
  1000.         move.l    d0,a0
  1001.  
  1002.         move.w    d3,d0
  1003.         and.w    #$fff8,d0
  1004.         mulu.w    BlkX(a6),d0
  1005.         lsl.l    #7-3,d0
  1006.         adda.l    d0,a0
  1007.  
  1008.     *1╠▐█»╕(8x8)ÆåÄcéΦë╜╫▓▌û┌é⌐éτò\Īé╖éΘé⌐îvÄZ
  1009.     * d7=ÄcéΦ╫▓▌Éö
  1010.     *---------------------------
  1011.         moveq.l    #8,d7
  1012.         moveq.l    #7,d0
  1013.         and.w    d3,d0
  1014.         sub.w    d0,d7
  1015.  
  1016.         lsl.w    #4,d0
  1017.         adda.w    d0,a0
  1018.  
  1019.     *1╠▐█»╕(8x8)ÆåÄcéΦë╜─▐»─û┌é⌐éτò\Īé╖éΘé⌐îvÄZ
  1020.     *---------------------------
  1021.         moveq.l    #$07,d0
  1022.         and.w    d2,d0
  1023.         add.w    d0,d0
  1024.         adda.w    d0,a0
  1025.  
  1026.         move.l    a0,TEMP_FP(a6)
  1027.  
  1028.     *ëµæ£╩▐»╠ºé⌐éτüAë╜╫▓▌ò¬ò\Īé╖éΘé⌐îvÄZ(d1.h=ëµæ£èOé╠ò\Ī╫▓▌Éö,d1.l=ëµæ£ôαé╠ò\Ī╫▓▌Éö)
  1029.     *-----------------------------
  1030.         move.w    Yline(a6),d0
  1031.         sub.w    d3,d0
  1032.  
  1033.         cmp.w    d1,d0
  1034.         bls    @f
  1035.         move.w    d1,d0
  1036. @@
  1037.         sub.w    d0,d1
  1038.         swap.w    d1
  1039.         move.w    d0,d1
  1040.  
  1041.     move.l    VSXbyte(a6),d5
  1042.     move.l    GETP_adrs(a6),a1
  1043.  
  1044. GetPart_Cont
  1045. * ├▌╬▀╫╪╠º▓┘é⌐éτëµæ£├▐░└é≡ô╟é▌ì₧é▐
  1046. *---------------------------------
  1047.     move.l    TEMP_FP(a6),a0
  1048.  
  1049.     btst.b    #2,Sys_flag(a6)
  1050.     beq    getp10
  1051.  
  1052.     clr.w    -(sp)
  1053.     move.l    a0,-(sp)
  1054.     move.w    temp_handle(a6),-(sp)
  1055.     dos    _SEEK
  1056.  
  1057.     moveq.l    #7,d0
  1058.     and.w    d2,d0
  1059.     add.w    d6,d0
  1060.     addq.w    #7,d0
  1061.     and.w    #$fff8,d0
  1062.     lsl.l    #7-3,d0
  1063.     move.l    d0,-(sp)
  1064.     move.l  Scroll_Area(a6),-(sp)
  1065.     move.w    temp_handle(a6),-(sp)
  1066.  
  1067.     dos    _READ
  1068.     lea.l    8+10(sp),sp
  1069.     lea.l    $0000.w,a0
  1070. getp10
  1071.     adda.l    Scroll_Area(a6),a0
  1072.  
  1073.     moveq.l    #-8,d0
  1074.     add.w    d7,d0
  1075.     lsl.w    #4,d0
  1076.     ext.l    d0
  1077.     add.l    lx(a6),d0
  1078.     add.l    d0,TEMP_FP(a6)
  1079.  
  1080. *ëµæ£ò\Ī
  1081. *-------------------------
  1082.     sub.w    d7,d1
  1083.     bcc    @f
  1084.     add.w    d1,d7
  1085.     clr.w    d1
  1086. @@
  1087.     subq.w    #1,d7
  1088. getp40
  1089.     move.w    Interval+2(a6),d0
  1090.     sub.w    d0,d4
  1091.     bcs    getp41
  1092.  
  1093.     movea.l    a2,a5
  1094.     movea.l    a0,a4
  1095.     jsr    (a1)
  1096.     lea.l    1024(a2),a2    1lineë║
  1097.     move.l    a2,d0
  1098.     bclr.l    #19,d0
  1099.     movea.l    d0,a2
  1100.  
  1101.     subq.w    #1,Y_last(a6)
  1102.     bnz    getp40
  1103.     bra    GetPart_allend
  1104. getp41
  1105.     add.w    d0,d4
  1106.     add.w    Interval(a6),d4
  1107.     lea    16(a0),a0
  1108.     dbra    d7,getp40
  1109. getp42
  1110.     moveq.l    #8,d7
  1111.     tst.w    d1
  1112.     bnz    GetPart_Cont
  1113.  
  1114.     swap.w    d1
  1115.     move.w    HX(a6),d5
  1116. GetPart110
  1117.     tst.w    d1
  1118.     beq    GetPart_allend
  1119.     move.w    d1,d3
  1120.     neg.w    d3
  1121.     bsr    GetPartYOver
  1122. GetPart_allend
  1123.     movem.w    (sp)+,d0/d2/d5-d7
  1124.     rts
  1125.  
  1126.  
  1127.  
  1128. GetPartYOver
  1129.     move.w    d6,d7
  1130.     moveq.l    #0,d0
  1131.     move.w    XL3(a6),d0
  1132.     mulu.w    Interval(a6),d7
  1133.     add.l    d0,d7
  1134.     divu.w    Interval+2(a6),d7
  1135.  
  1136.     move.w    d5,d0
  1137.     sub.w    Home_X(a6),d0
  1138.     and.w    #$1ff,d0    d0=ëµû╩é╠Homeê╩Æué⌐éτò\ĪèJÄnê╩Æué▄é┼é╠─▐»─Éö
  1139.     sub.w    VSXsize(a6),d0
  1140.     neg.w    d0        d0=ò\ĪèJÄnê╩Æué⌐éτüAëµû╩é╠ëEÆ[é▄é┼é╠─▐»─Éö
  1141.  
  1142.     cmp.w    d7,d0
  1143.     bhi    @f
  1144.     move.w    d0,d7
  1145. @@
  1146.     add.w    d7,d5
  1147.     sub.w    #512,d5
  1148.     bhi    @f        VRAMé╠ëEÆ[é≡é▄é╜é«
  1149.     clr.w    d5        é▄é╜é¬é╚éó
  1150. @@
  1151.     sub.w    d5,d7
  1152.  
  1153.     move.w    d5,-(sp)
  1154.     move.w    d7,-(sp)
  1155.  
  1156. getpYO100
  1157.     sub.w    Interval+2(a6),d4
  1158.     bcs    getpYO200
  1159.  
  1160.     movea.l    a2,a5
  1161.  
  1162.     moveq.l    #0,d0
  1163.     move.w    (sp),d7
  1164.     bra    2f
  1165. 1    move.w    d0,(a5)+
  1166. 2    dbra.w    d7,1b
  1167.  
  1168.     lea.l    -1024(a5),a5
  1169.  
  1170.     move.w    2(sp),d7
  1171.     bra    2f
  1172. 1    move.w    d0,(a5)+
  1173. 2    dbra.w    d7,1b
  1174.  
  1175.     lea.l    1024(a2),a2        1lineë║
  1176.     move.l    a2,d0
  1177.     and.l    #$c7ffff,d0
  1178.     movea.l    d0,a2
  1179.  
  1180.     subq.w    #1,Y_last(a6)
  1181.     bnz    getpYO100
  1182.     bra    getpYO_over_end
  1183.  
  1184. getpYO200
  1185.     add.w    Interval(a6),d4
  1186.     add.w    Interval+2(a6),d4
  1187.     subq.w    #1,d1
  1188.     beq    getpYOend
  1189.     addq.w    #1,d3
  1190.     bmi    getpYO100
  1191. getpYOend
  1192.     addq.l    #4,sp
  1193.     rts
  1194.  
  1195. getpYO_over_end
  1196.     moveq.l    #0,d1
  1197.     bra    getpYOend
  1198.  
  1199.   .end
  1200.  
  1201.